package com.jay.proxy;

import com.jay.RpcApplication;

import java.lang.reflect.Proxy;

/**
 * 服务代理工厂（工厂模式，用于创建代理对象）
 */
public class ServiceProxyFactory {

    /**
     * 根据服务类获取代理对象
     *
     * @param serviceClass 服务类的Class对象
     * @param <T>          服务类的类型
     * @return 返回指定服务类的代理对象
     */
    public static <T> T getProxy(Class<T> serviceClass) {
        // 根据配置决定是否使用Mock对象
        if (RpcApplication.getRpcConfig().isMock()) {
            return getMockProxy(serviceClass);
        }

        // 通过Java动态代理创建代理对象
        return (T) Proxy.newProxyInstance(
                serviceClass.getClassLoader(),
                new Class[]{serviceClass},
                new ServiceProxy());
    }

    /**
     * 根据服务类获取 Mock 代理对象
     *
     * @param serviceClass 服务类的Class对象
     * @param <T>          服务类的类型
     * @return 返回指定服务类的Mock代理对象
     */
    public static <T> T getMockProxy(Class<T> serviceClass) {
        // 通过Java动态代理创建Mock代理对象
        return (T) Proxy.newProxyInstance(
                serviceClass.getClassLoader(),
                new Class[]{serviceClass},
                new MockServiceProxy());
    }
}

